Майнор "Интеллектуальный анализ данных"

Курс "Современные методы машинного обучения"

Лабораторная работа №2. Object Detection.

Выполнил Артём Суворов, 19БИ-3, ИАД-2

Ссылка на этот колаб: тык

Data

Install library for processing the labeling

pip install xmltodict

В этом задании потребуется обучить детектор фруктов на изображении. Данные находятся в архиве data.zip. Данные уже поделены на train и test.

Датасет для трех классов.





Функции для вычисления mAP.




Часть 1.

Вес в общей оценке - 0.4

В данной части вам нужно решить задачу детектирования фруктов "без классификации". Для этого все три класса нужно объединить в один (нужно внести соотвествующие изменения в датасет).

Поссмотреть, как делали на семинарах. Там была детекция пешеходов

Задание 1.

Примените обученные детекторы из torchvision.models - Faster R-CNN, RetinaNet, SSD (можно только с одним backbone, можно все попробовать) - и оцените качество детекции на тестовом датасете.

На оригинальной картинке 5 фруктов, необученная модель нашла гораздо больше

Необученная Faster-RCNN имеет очень малую mAP

Необученная RetinaNet тоже имеет малую mAP

Необученная SSD имеет самую меньшую mAP

Задание 2.

Обучите детекторы из задания выше на обучающем датасете, оцените качество на тестовом. При необходимости, подберите гиперпараметры - optimizer, lr, weight_decay etc.
Выполните обучение в двух вариантах: со случайной инициализацией весов и с загрузкой весов уже обученной модели. Сравните качество.

Обученная Faster-RCNN имеет уже больший mAP

P.S.: обучение проводилось на GPU, затем модель сохранялась. Выводы написаны после загрузки модели из файла на CPU. Поэтому точность сразу после обучения и после загрузки модели могут отличаться

А сейчас проверим, какой будет результат у модели со случайной инициализацией весов

Задание 3.

Лучшей моделью является faster-rccn

Как можно видеть, точность fatserrcnn уменьшалась с ростом порога IoU

Чем строже мы отбираем bounding boxes, тем выше точность модели

Задание 4.

Нарисуйте предсказанные bounding box'ы для любых двух картинок из тестового датасета и каких-нибудь картинок из интернета (релевантных - где есть эти фрукты - и тех, где этих фруктов нет).

Белая рамка - настоящая детекция. Красная - рамка модели

Как можно видеть, модель довольно неплохо распознаёт фрукты

Попробуем детектировать фрукты по картинке из интернета

Как можно видеть, модель почти хорошо распознала апельсин из видео (уверенность в классе "фрукт" - 0.98). Но также распознала много лишнего

Также модель увидела почти все фрукты из другой картинки

На нерелевантной картинке сеть что-то увидела, но то, что это фрукт, не уверена

Задание 5.

Реализуйте и примените Non-maximum Suppression. Оцените (визуально и по метрикам), как его использование влияет на качество детекции.
NB: Чтобы продемонстрировать эффективность применения алгоритма, возможно, нужно будет взять достаточно низкий порог конфиденса.

Применение Non-maximum suppression визуально улучшает детекцию. Посмотрим на mAP

Применение Non-maximum Suppression незначительно увеличило точности модели




Часть 2.

Вес в общей оценке - 0.4

Выполните задания 2-5 из предыдущей части для случая 3-х классов (как в изначальном датасете).

Посмотрим, как ведёт себя лучшая необученная сеть

Пока что модель вообще не понимает, что она делает

Обучим модели

Теперь лучшая модель ведёт себя так:

Модель распознала яблоки, но слишком много

Random initialization

Обученные с нуля сети не стоит рассматривать - их точность менее 1%




Часть 3.

Вес в общей оценке - 0.2

Обучите модель для object detection для трех классов на обучающем датасете и добейтесь PR AUC не менее 0.91 на тестовом.
Баллы за задание вычисляются по формуле: min(2, 2 * Ваш auc / 0.91).

Теперь посмотрим на реальные примеры

Модель распознала все яблоки (даже немного больше)

Модель однозначно распознала, что это апельсин

В некоторых местах (при незнакомых фруктах) модель ссылается на похожий фрукт. Но при этом пропустила несколько знакомых

Ну а тут можно списать на случайность - тем более вероятность меньше 0.5




Бонусные задания.

  1. При обучении используйте аугментации (в первую очередь пространственные) из albumentations или torchvision.transforms.
  2. Возьмите одну из детекционных архитектур (желательно, не старее 2020 года), у которой выложены тренировочный код и чекпоинты на гитхабе, обучите и провалидируйте ее на данных этой лабораторной.